package conf

import (
	"github.com/spf13/viper"
	"log"
	"time"
)

var GlobalConf = new(Conf)

func init() {
	// 初始化 Viper
	viper.SetConfigFile("../conf/conf.yaml") // 配置文件名 (不带扩展名)

	// 读取配置文件
	if err := viper.ReadInConfig(); err != nil {
		if _, ok := err.(viper.ConfigFileNotFoundError); ok {
			// 配置文件未找到错误；如果需要可以忽略
			log.Fatalf("配置文件未找到: %v", err)
		} else {
			// 配置文件找到但存在其他错误
			log.Fatalf("读取配置文件错误: %v", err)
		}
	}

	if err := viper.Unmarshal(&GlobalConf); err != nil {
		log.Fatalf("解析配置文件失败: %v", err)
	}

	//fmt.Printf("  AccessSecret: %s\n", GlobalConf.JwtAuth.AccessSecret)
	//fmt.Printf("  AccessExpire: %d 秒\n", GlobalConf.JwtAuth.AccessExpire)
}

// Config 定义配置结构体
type Conf struct {
	Name                 string   `mapstructure:"Name"`
	Host                 string   `mapstructure:"Host"`
	Mode                 string   `mapstructure:"Mode"`
	AllowedSPDomains     []string `mapstructure:"AllowedSPDomains"`
	DefaultSpCallbackURL string   `mapstructure:"DefaultSpCallbackURL"`
	JwtAuth              JwtAuth  `mapstructure:"JwtAuth"`
	Log                  Log      `mapstructure:"Log"`
	Mysql                Mysql    `mapstructure:"Mysql"`
}

// JwtAuth 定义 JWT 认证相关配置
type JwtAuth struct {
	AccessSecret string        `mapstructure:"AccessSecret"`
	AccessExpire time.Duration `mapstructure:"AccessExpire"`
}

// Log 定义日志相关配置
type Log struct {
	ServiceName string `mapstructure:"ServiceName"`
	Level       string `mapstructure:"Level"`
	Encoding    string `mapstructure:"Encoding"`
	Stat        bool   `mapstructure:"Stat"`
}

// Mysql 定义 MySQL 数据库相关配置
type Mysql struct {
	User     string `mapstructure:"User"`
	Password string `mapstructure:"Password"`
	Host     string `mapstructure:"Host"`
	Port     string `mapstructure:"Port"`
	DBName   string `mapstructure:"DBName"`
	Config   string `mapstructure:"Config"`
}
